package com.itheima.leetcode.od.b.dynamicprogramming;

/**
 * (A卷,100分)- 查找重复代码（Java & JS & Python）
 * <p>
 * 题目描述
 * <p>
 * 小明负责维护项目下的代码，需要查找出重复代码，用以支撑后续的代码优化，请你帮助小明找出重复的代码。
 * 重复代码查找方法：以字符串形式给定两行代码（字符串长度 1 < length <= 100，由英文字母、数字和空格组成），找出两行代码中的最长公共子串。
 * 注：如果不存在公共子串，返回空字符串
 * <p>
 * 输入描述
 * <p>
 * 输入的参数text1, text2分别表示两行代码
 * <p>
 * 输出描述
 * <p>
 * 输出任一最长公共子串
 * <p>
 * 用例
 * <p>
 * 输入	hello123world
 * <p>
 * hello123abc4
 * <p>
 * 输出	hello123
 * 说明	无
 * 输入	private_void_method
 * <p>
 * public_void_method
 * <p>
 * 输出	_void_method
 * 说明	无
 * <p>
 * 输入	hiworld
 * <p>
 * hiweb
 * 输出	hiw
 * 说明	无
 */
public class SearchRepeatCode {
    public static void main(String[] args) {
        /*Scanner sc = new Scanner(System.in);

        String str1 = sc.nextLine();
        String str2 = sc.nextLine();*/

        System.out.println(getResult("hello123world", "hello123abc4"));
    }

    public static String getResult(String str1, String str2) {
        int n = str1.length();
        int m = str2.length();

        int[][] dp = new int[n + 1][m + 1];

        int max = 0;
        String ans = "";

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (str1.charAt(i - 1) == str2.charAt(j - 1)) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;

                    if (dp[i][j] > max) {
                        max = dp[i][j];
                        ans = str1.substring(i - max, i);
                    }
                } else {
                    dp[i][j] = 0;
                }
            }
        }

        return ans;
    }
}